# To change this template, choose Tools | Templates
# and open the template in the editor.

require 'rubygems'
require 'dbf'
require 'persona'
require 'garantia'
require 'empleado'
require 'local'
require 'credito'
require 'cuota'
require 'time'

ActiveRecord::Base.establish_connection(
  :adapter => "postgresql",
  :database => "bernardoCreditos_dev",
  :username => "postgres",
  :password => "postgres",
  :host=> "localhost",
  :port=> "5432",
  :pool=> "5",
  :encoding => "utf8"
)

ActiveSupport::Inflector.inflections do |inflect|
  inflect.plural /([aeiou])([A-Z]|_|$)/, '\1s\2'
  inflect.plural /([rlnd])([A-Z]|_|$)/, '\1es\2'
  inflect.singular /([aeiou])s([A-Z]|_|$)/, '\1\2'
  inflect.singular /([rlnd])es([A-Z]|_|$)/, '\1\2'
  inflect.irregular 'user', 'users'
  inflect.irregular 'account', 'accounts'
  inflect.irregular 'password', 'passwords'
  inflect.irregular 'session', 'sessions'
end

#Se limpian las tablas releacionadas con la migracion
Empleado.delete_all
Cuota.delete_all
Credito.delete_all
Persona.delete_all("observaciones like '%Se crea esta persona por el credito (ci,vale%'")

#cargo archivo
tabla_creditos = DBF::Table.new("C:/creditos.dbf")

creditos_total = 0
creditos_error = 0

puts "Arranca: #{Time.now}"

#itero sobre todos los creditos
tabla_creditos.each do |credito|
  begin
    creditos_total += 1

    #busco la persona
    persona_credito = Persona.find(:first, :conditions => "cedula='#{credito.ci}'")
    if persona_credito.nil?
      puts "CREDITO (ci,vale) = (#{credito.ci}, #{credito.vale}) - No se encontro la persona con la cedula: #{credito.ci}. Se la define en el modelo"
      persona_credito =Persona.create(:cedula => credito.ci, :nombres => "SIN DATOS", :apellidos => "SIN DATOS",
                                      :observaciones => "Se crea esta persona por el credito (ci,vale) = (#{credito.ci}, #{credito.vale})")
    end

    #busco al vendedor
    if !credito.vendedor.nil? and credito.vendedor.strip.length > 0
      empleado_vendedor = Empleado.find(:first, :conditions => "nombre = 'Codigo: #{credito.vendedor.strip}'")

      if empleado_vendedor.nil?
        puts "CREDITO (ci,vale) = (#{credito.ci}, #{credito.vale}) - No se encontro al empleado vendedor con el codigo: #{credito.vendedor}. Se lo define en el modelo"
        empleado_vendedor = Empleado.create(:nombre => "Codigo: #{credito.vendedor.strip}")
      end
    else
      empleado_vendedor = nil
    end

    #busco al otorgador
    if !credito.otorgado.nil? and credito.otorgado.strip.length > 0
      empleado_otorgador = Empleado.find(:first, :conditions => "nombre = 'Codigo: #{credito.otorgado.strip}'")

      if empleado_otorgador.nil?
        puts "CREDITO (ci,vale) = (#{credito.ci}, #{credito.vale}) - No se encontro al empleado otorgador con el codigo: #{credito.otorgado}. Se lo define en el modelo"
        empleado_otorgador = Empleado.create(:nombre => "Codigo: #{credito.otorgado.strip}")
      end
    else
      empleado_vendedor = nil
    end

    Credito.new do |c|
      c.persona = persona_credito
      #c.local #credito.vale -divague total lo de que el primer digito se coresponde con el local, hablar con daniel
      c.empleado_otorgador = empleado_otorgador
      c.empleado_vendedor = empleado_vendedor
      c.cantidad_cuotas = credito.cantcuo
      c.fecha_credito = credito.fechcre
      c.diferido = credito.diferido
      c.especial = credito.especial
      c.cuotas_pagas = credito.pagas
      #c.anulada = credito.anulado - no existe este campo en el dbf, hablar con daniel
      c.fecha_anulado = nil #credito.fechanul
      c.vale_temp = credito.vale
      c.save
    end

  rescue Exception => exc
    creditos_error += 1
    STDERR.puts "CREDITO (ci,vale) = (#{credito.ci}, #{credito.vale}) - Error al dar de alta: #{exc.message}"
  end
end

puts "Termino: #{Time.now}"
puts "Creditos procesados: #{creditos_total}"
puts "Creditos con ERRORES: #{creditos_error}"
